#ifndef __GAMECONTROLLER_H__
#define __GAMECONTROLLER_H__

/****************************************************************************** */	
//	Author: Maarten Lambert
//	
/****************************************************************************** */

#include "Subject.h"
#include "SpelerContext.h"
#include "Spel.h"

/* soorten Kaarten */
#include "KaartLinks.h"
#include "KaartRechts.h"
#include "KaartAchteruit.h"
#include "KaartDraaiOm.h"
#include "KaartVooruit.h"



class Spel;

class GameController : public Subject
{

public:
	/* constructor */
	GameController(Spel * parent);

	/* acties vanuit */
	int checkWinnaar();
	void volgendeRonde();
	int beeindigSpel(){ return 1;}
	
	/* een random kaart verkrijgen */
	Kaart * getRandomKaart();

	const Spel* getSpel() const { return m_parent; }
public:
	/* add observer en remove observer */
	void addSpelerContext( SpelerContext* context );
	void removeSpelerContext(SpelerContext * context);

private:
	/* Parent pointer */
	Spel * m_parent;

	/* Flags */
	int winnaar_Flag;
	int allReady_Flag;

	/* Uit te voeren kaarten*/
	vector<Kaart*> *m_uitvoerLijst;
	
private:
	/* interne acties bij het uitvoeren van een ronde */
	void verdeelKaarten();
	void checkSpelersReady();
	void ontvangKaarten(int registerNr);
	void sorteerKaarten();
	void voerKaartenUit();

};

#endif

